// 生产环境的插件electron
import type { Plugin } from 'vite'
// 从net模块导入AddressInfo类型
import type { AddressInfo } from 'net'
import { spawn } from 'child_process'
import esbuild from 'esbuild'
import electronPath from 'electron'

// vite插件要求必须导出一个对象，对象必须包含name属性
// 在这个对象里有很多钩子
export default function electronDev(): Plugin {
  return {
    name: 'electron-dev',
    // vite启动服务时，会调用这个钩子
    configureServer(server) {
      // 同步打包
      esbuild.buildSync({
        entryPoints: ['src/background.ts'],
        outfile: 'dist/background.js',
        bundle: true,
        platform: 'node',
        target: 'node18',
        format: 'esm',
        external: ['electron'],
      })
      server.httpServer?.on('listening', () => {
        // 读取vite的配置文件
        const addressInfo = server.httpServer?.address() as AddressInfo
        console.log(addressInfo.port)
        // 拼接ip地址
        const IP = `http://localhost:${addressInfo.port}`
        // // 第一个参数是electron的入口文件
        spawn(electronPath as unknown as string, ['dist/background.js', IP])
        console.log(IP)
      })
    },
  }
}
